import { createRouter, createWebHistory } from 'vue-router';
import { useUserStore } from '@/stores/user';
import { staticRoutes, layoutRoute } from './routes';
import http from '@/utils/request';
import { usePermissionStore } from '@/stores/permission';

const router = createRouter({
  history: createWebHistory(),
  routes: [...staticRoutes, layoutRoute],
  scrollBehavior: () => ({ top: 0 })
});

const whiteList = ['/login', '/404', '/front']; // 白名单定义

// 修改路由守卫中的动态路由处理逻辑
router.beforeEach(async (to, from, next) => {
  console.log('[导航开始] 当前路径:', to.path, '来源路径:', from.path);

  if (to.meta.title) {
    document.title = `${to.meta.title} - 小花在线图书馆`;
  } else {
    document.title = '小花在线图书馆';
  }

  const userStore = useUserStore();

  console.log(userStore,"--->userStore")

  const permissionStore = usePermissionStore();
  // 路由守卫执行顺序
  router.beforeEach((to, from, next) => {
    console.log('[导航开始] 当前路径:', to.path, '来源路径:', from.path);
    console.log('[用户状态] token存在:', !!userStore.token, '角色:', userStore.roles);
    
    // 动态路由添加成功后
    console.log('[路由生成] 开始生成动态路由');
    console.log('[路由状态] 最终路由表:', router.getRoutes());
  });
  
  // 侧边栏组件日志（d:\阿花\workSpace\library_client\src\layouts\components\Sidebar.vue）
  console.log('侧边栏初始化完成，当前权限路由:', permissionStore.routes);
  console.log('处理后的路由数据:', processedRoutes.value);
  console.log('当前dashboard路由:', dashboardRoute);
  
  // 菜单点击时
  console.log('菜单点击事件:', { routeName, routePath, fullPath });

  // 1. 白名单检查
  if (whiteList.some(path => to.path.startsWith(path))) {
    console.log('[白名单] 直接放行');
    next();
    return;
  }

  // 2. 权限路由标识
  const isAuthRoute = to.path.startsWith('/dashboard/');

  // 3. 未登录访问受保护路由
  if (!userStore.token && isAuthRoute) {
    console.warn('[权限拦截] 未登录访问受保护路由');
    next(`/login?redirect=${encodeURIComponent(to.fullPath)}`);
    return;
  }

  // 4. 已登录处理逻辑
  if (userStore.token) {
    console.log('[已登录] 开始处理逻辑');
    
    // 4.1 获取用户信息（添加角色验证日志）
    if (!userStore.library_users.roles?.length) {
      console.log('[用户信息] 开始获取角色信息');
      try {
        const infoRes = await http.get('/user/getInfo');
        userStore.roles = infoRes.data.roles;
        console.log('[用户角色] 当前角色:', userStore.roles); // 新增角色日志
      } catch (error) {
        userStore.logout();
        next('/login');
        return;
      }
    }

    // 4.2 动态路由处理（修复触发条件）
    const shouldGenerate = userStore.roles?.length > 0 && 
                          !permissionStore.hasGenerated &&
                          router.getRoutes().every(r => !r.path.startsWith('/dashboard/'));
    
    if (shouldGenerate) {
      console.log('[路由生成] 开始生成动态路由');
      
      await permissionStore.generateRoutes(userStore.roles);
    
      // 修复1：使用标准路径格式（保留dashboard前缀）
      permissionStore.routes.forEach(route => {
        router.addRoute('DashboardRoot', {
          ...route,
          // 保持完整的dashboard前缀路径
          path: route.path.startsWith('/dashboard') 
            ? route.path 
            : `/dashboard/${route.path}`
        });
      });
    
      // 修复2：更新侧边栏菜单数据（使用完整路径）
      const dashboardRoute = router.getRoutes().find(r => r.path === '/dashboard');
      permissionStore.routes = dashboardRoute?.children || [];
    
      // 修复3：添加路由加载完成日志
      console.log('[路由状态] 最终路由表:', 
        router.getRoutes().map(r => ({ 
          path: r.path, 
          name: r.name,
          meta: r.meta 
        }))
      );
      
      // 修复2：确保路径格式正确（保留开头的/）
      permissionStore.routes.forEach(route => {
        const normalizedPath = route.path.startsWith('/dashboard') 
          ? route.path 
          : `/dashboard/${route.path}`;
        router.addRoute('layoutRoute', {
          ...route,
          path: normalizedPath
        });
      });
    
      // 修复3：添加微任务等待路由更新
      await nextTick();
      
      console.log('[路由状态] 最终路由表:', 
        router.getRoutes().map(r => r.path)
      );
    
      permissionStore.setHasGenerated(true);
    
      // 使用replace强制刷新路由实例
      router.replace(to.redirectedFrom || '/dashboard/overview');
      return;
    }

    // 4.3 已登录访问登录页
    if (to.path === '/login') {
      console.log('[导航拦截] 已登录访问登录页，重定向到控制台');
      next('/dashboard/overview');
      return;
    }
  }

  console.log('[导航放行] 进入最终next()');
  next();
});

export { router };
export default router;


console.log('[路由状态] 当前注册路由:', 
  router.getRoutes().map(r => ({ path: r.path, name: r.name }))
);